home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML Authority.sea / XML Authority / Required / extplugin.jar / com / extensibility / plugin / PluginRegistry.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-04-17  |  3.7 KB  |  132 lines

  1. package com.extensibility.plugin;
  2.  
  3. import java.io.File;
  4. import java.lang.reflect.Method;
  5. import java.util.Enumeration;
  6. import java.util.Hashtable;
  7. import java.util.Vector;
  8.  
  9. public class PluginRegistry {
  10.    public static final int API_VERSION_1_1 = 65537;
  11.    public static final int API_VERSION_1_2 = 65538;
  12.    private int apiVersion = 0;
  13.    private Hashtable apiListing = new Hashtable();
  14.    private PluginClassLoader loader = new PluginClassLoader();
  15.    private static Class[] methodParams = new Class[]{Class.forName("com.extensibility.plugin.PluginRegistry")};
  16.    private static PluginRegistry globalRegistry = null;
  17.  
  18.    public PluginRegistry() {
  19.       String var1 = System.getProperty("java.specification.version");
  20.       if (var1 == null) {
  21.          this.apiVersion = 65537;
  22.       } else {
  23.          Float var2 = new Float(var1);
  24.          this.apiVersion = (int)(var2 * (float)65536);
  25.       }
  26.  
  27.    }
  28.  
  29.    public static PluginRegistry getRegistry() {
  30.       return globalRegistry;
  31.    }
  32.  
  33.    public static void setRegistry(PluginRegistry var0) {
  34.       globalRegistry = var0;
  35.    }
  36.  
  37.    public void registerPluginsInFolder(File var1) {
  38.       if (var1.isDirectory()) {
  39.          String[] var2 = var1.list(new 1((PluginRegistry)null));
  40.          Vector var3 = this.loadJars(var1, var2);
  41.          this.callMainClasses(var3);
  42.       }
  43.    }
  44.  
  45.    public boolean registerPlugin(String var1, Class var2, String var3, int var4) {
  46.       if (var4 > this.apiVersion) {
  47.          return false;
  48.       } else {
  49.          Object var5 = this.apiListing.get(var1);
  50.          Vector var6;
  51.          if (var5 == null) {
  52.             var6 = new Vector();
  53.             this.apiListing.put(var1, var6);
  54.          } else {
  55.             var6 = (Vector)var5;
  56.          }
  57.  
  58.          var6.addElement(var2);
  59.          return true;
  60.       }
  61.    }
  62.  
  63.    public int getPluginApiCount(String var1) {
  64.       Object var2 = this.apiListing.get(var1);
  65.       int var3 = 0;
  66.       if (var2 != null) {
  67.          Vector var4 = (Vector)var2;
  68.          var3 = var4.size();
  69.       }
  70.  
  71.       return var3;
  72.    }
  73.  
  74.    public Object getNthPlugin(String var1, int var2) {
  75.       Object var3 = this.apiListing.get(var1);
  76.       Object var4 = null;
  77.       if (var3 != null) {
  78.          Vector var5 = (Vector)var3;
  79.          Class var6 = (Class)var5.elementAt(var2);
  80.  
  81.          try {
  82.             if (var6 != null) {
  83.                var4 = var6.newInstance();
  84.             }
  85.          } catch (Exception var8) {
  86.          }
  87.       }
  88.  
  89.       return var4;
  90.    }
  91.  
  92.    protected void callMainClasses(Vector var1) {
  93.       Enumeration var2 = var1.elements();
  94.  
  95.       while(var2.hasMoreElements()) {
  96.          String var3 = (String)var2.nextElement();
  97.  
  98.          try {
  99.             Class var4 = this.loader.loadClass(var3, true);
  100.             Method var5 = var4.getDeclaredMethod("registerPlugin", methodParams);
  101.             Object[] var6 = new Object[]{this};
  102.             var5.invoke((Object)null, var6);
  103.          } catch (LinkageError var7) {
  104.          } catch (Exception var8) {
  105.          }
  106.       }
  107.  
  108.    }
  109.  
  110.    protected Vector loadJars(File var1, String[] var2) {
  111.       Vector var3 = new Vector();
  112.       var3.ensureCapacity(var2.length);
  113.  
  114.       for(int var4 = 0; var4 < var2.length; ++var4) {
  115.          File var5 = new File(var1, var2[var4]);
  116.          String var6 = null;
  117.          if (var5.isFile()) {
  118.             try {
  119.                var6 = this.loader.enumerateClasses(var5);
  120.             } catch (Exception var8) {
  121.             }
  122.          }
  123.  
  124.          if (var6 != null) {
  125.             var3.addElement(var6);
  126.          }
  127.       }
  128.  
  129.       return var3;
  130.    }
  131. }
  132.